package com.fhzn.boss.tools;

import com.fhzn.boss.entity.User;
import com.fhzn.boss.mapper.UserMapper;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Set;

/**
 * @author fhzn
 * 用户管理类
 */
@Slf4j
@Component
@RequiredArgsConstructor
public class UserManager {

    private final UserMapper userMapper;


    /**
     * 根据昵称查询用户
     *
     * @param nickName 用户昵称
     * @return 用户信息
     */
    public User getUser(String nickName) {
        return userMapper.findUserByNickName(nickName);
    }


    /**
     * 获取操作者能操作的角色列表
     * 操作者已有角色和期望赋予角色的交集
     *
     * @param targetRoles   目标角色id
     * @param operatorRoles 操作角色id
     * @return 角色id列表
     */
    public List<Integer> canOperatorRoles(List<Integer> targetRoles, List<Integer> operatorRoles) {
        Set<Integer> targetRoleSet = Sets.newHashSet(targetRoles);
        Set<Integer> operatorRoleSet = Sets.newHashSet(operatorRoles);
        return Lists.newArrayList(Sets.intersection(targetRoleSet, operatorRoleSet));
    }

    /**
     * 获取真实添加的角色列表
     * 添加的角色列表和已有角色列表的差集
     *
     * @param targetRoles 目标角色id
     * @param existRoles  角色id
     * @return 真是角色id
     */
    public List<Integer> realAddRoles(List<Integer> targetRoles, List<Integer> existRoles) {
        Set<Integer> targetRoleSet = Sets.newHashSet(targetRoles);
        Set<Integer> existRoleSet = Sets.newHashSet(existRoles);
        return Lists.newArrayList(Sets.difference(targetRoleSet, existRoleSet));
    }

}
